home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1998 January / Macworld (1998-01).dmg / Shareware World / Comms & Internet / HTML mode 2.0 etc. / htmlMenu.tcl < prev    next >
Text File  |  1997-09-22  |  32KB  |  953 lines

  1. ## -*-Tcl-*-
  2.  # ###################################################################
  3.  #  HTML mode - tools for editing HTML documents
  4.  # 
  5.  #  FILE: "htmlMenu.tcl"
  6.  #                                    created: 96-04-29 21.31.40 
  7.  #                                last update: 97-09-21 13.40.37 
  8.  #  Author: Johan Linde
  9.  #  E-mail: <jl@theophys.kth.se>
  10.  #     www: <http://bach.theophys.kth.se/~jl/Alpha.html>
  11.  #  
  12.  # Version: 2.0
  13.  # 
  14.  # Copyright 1996, 1997 by Johan Linde
  15.  #  
  16.  # This software may be used freely, and distributed freely, as long as the 
  17.  # receiver is not obligated in any way by receiving it.
  18.  #  
  19.  # If you make improvements to this file, please share them!
  20.  # 
  21.  # ###################################################################
  22.  ##
  23.  
  24. proc htmlMenu.tcl {} {}
  25.  
  26. # Loading of packages.
  27. proc htmlHTML3.2andCSS {} {htmlLoadPackage 3}
  28. proc htmlExtensions {} {htmlLoadPackage 1}
  29.  
  30. proc htmlLoadPackage {level} {
  31.     global htmlPackageToUse
  32.     global HTMLmodeVars modifiedModeVars 
  33.  
  34.     if {$level != $htmlPackageToUse} {    
  35.         set HTMLmodeVars(htmlPackageToUse) $level
  36.         set htmlPackageToUse $level
  37.         lappend modifiedModeVars {htmlPackageToUse HTMLmodeVars}
  38.         if {$htmlPackageToUse == 1} {
  39.             htmlExtensions.tcl
  40.             htmlDisableSome 3 on
  41.             htmlMarkExtUtil
  42.             message "Extensions"
  43.         } else {
  44.             html32.tcl
  45.             htmlMark32Util
  46.             message "HTML 3.2"
  47.         }
  48.         htmlDisMark
  49.     }
  50. }
  51.  
  52. proc htmlMarkExt {} {
  53.     markMenuItem -m {Packages} {Extensions} 1 
  54.     markMenuItem -m {Packages} {HTML 3.2 and CSS} 0
  55. }
  56.  
  57. proc htmlMarkExtUtil {} {
  58.     global htmlUtilsMenu htmlElemKeyBinding htmlAdditionExist htmlShownWarning
  59.     enableMenuItem $htmlUtilsMenu Extend [expr ![info exists htmlShownWarning]]
  60.     htmlEnableExtend [info exists htmlElemKeyBinding] $htmlAdditionExist
  61. }
  62.  
  63. proc htmlMark32 {} {
  64.     markMenuItem -m {Packages} {Extensions} 0
  65.     markMenuItem -m {Packages} {HTML 3.2 and CSS} 1 
  66. }
  67.  
  68. proc htmlMark32Util {} {
  69.     global htmlUtilsMenu
  70.     enableMenuItem $htmlUtilsMenu Extend off
  71. }
  72.  
  73. # Hide and show Netscape and IE.
  74. proc htmlHideNetscapeOnly {} {htmlHide Netscape}
  75. proc htmlHideIEOnly {} {htmlHide IE}
  76.  
  77. proc htmlHide {what} {
  78.     global htmlDisabledItems1 htmlDisabledNetscape htmlDisabledIE HTMLmodeVars modifiedModeVars
  79.     
  80.     htmlDisableSome 1 on
  81.     set HTMLmodeVars(hide${what}) [expr ![set HTMLmodeVars(hide${what})]]
  82.     lappend modifiedModeVars [list hide$what HTMLmodeVars]
  83.     markMenuItem -m Packages "Hide $what Only" [set HTMLmodeVars(hide${what})] 
  84.     htmlSetDis1
  85.     htmlDisableSome 1 off
  86.     message "[lindex {Show Hide} [set HTMLmodeVars(hide${what})]] $what only."
  87. }
  88.  
  89. # Disable some HTML elements    
  90. proc htmlDisableSome {num onoff} {
  91.     global htmlElemKeyBinding htmlDisabledItems3 htmlDisabledItems1 htmlMenu
  92.     foreach i [set htmlDisabledItems$num] {
  93.         set it [split $i /]
  94.         enableMenuItem [lindex $it 0] [lindex $it 1] $onoff
  95.     }
  96.     # Disable Custom menu in HTML 3.2
  97.     if {[info exists htmlElemKeyBinding]} {enableMenuItem $htmlMenu Custom [expr $num == 1]}
  98. }
  99.  
  100. proc htmlUseBigBrother {} {
  101.     global HTMLmodeVars modifiedModeVars
  102.     set HTMLmodeVars(useBigBrother) [expr !$HTMLmodeVars(useBigBrother)]
  103.     if {[catch {nameFromAppl Bbth}]} {
  104.         set HTMLmodeVars(useBigBrother) 0
  105.         enableMenuItem {Check Links} {Use Big Brother} off
  106.     }
  107.     markMenuItem -m {Check Links} {Use Big Brother} $HTMLmodeVars(useBigBrother) 
  108.     lappend modifiedModeVars {useBigBrother HTMLmodeVars}
  109.     message "[lindex {"Don't use" Use} [set HTMLmodeVars(useBigBrother)]] Big Brother."
  110. }
  111.  
  112. proc htmlHideCSSAttributes {} {
  113.     global HTMLmodeVars modifiedModeVars
  114.     set HTMLmodeVars(hideStyleAttrs) [expr !$HTMLmodeVars(hideStyleAttrs)]
  115.     markMenuItem -m Packages "Hide CSS Attributes" $HTMLmodeVars(hideStyleAttrs) 
  116.     lappend modifiedModeVars {hideStyleAttrs HTMLmodeVars}
  117.     message "[lindex {Show Hide} [set HTMLmodeVars(hideStyleAttrs)]] CSS attributes."
  118. }
  119.  
  120. # Called from HTML menu to change browser.
  121. proc htmlToggleBrowser {brws} {
  122.     global htmlBrowsers browserSig modifiedVars
  123.     foreach b $htmlBrowsers {
  124.         if {$brws == [lindex $b 1]} {set browserSig [lindex $b 0]}
  125.     }
  126.     lappend modifiedVars browserSig
  127. }
  128.  
  129. # Called whenever browserSig is changed.
  130. proc htmlToggleBrowser2 {args} {
  131.     global browserSig htmlBrowsers HTMLmodeVars
  132.     if {[lsearch -exact $HTMLmodeVars(browsers) $browserSig] < 0} {htmlAddBrowser $browserSig}
  133.     foreach b $htmlBrowsers {
  134.         if {$browserSig == [lindex $b 0]} {
  135.             markMenuItem -m Browsers [lindex $b 1] on 
  136.         } else {
  137.             markMenuItem -m Browsers [lindex $b 1] off
  138.         }
  139.     }
  140. }
  141.  
  142. # Add a browser to Browser menu.
  143. proc htmlAddBrowser {{sig ""}} {
  144.     global htmlBrowsers HTMLmodeVars modifiedModeVars browserSig
  145.     if {$sig == ""} {
  146.         set fil [getfile "Locate a web browser."]
  147.         set sig [getFileSig $fil]
  148.     }
  149.     if {[catch {nameFromAppl $sig} fil]} {
  150.         alertnote "Couldn't get the name of the browser. If nothing else helps try rebuilding the desktop."
  151.         return
  152.     }
  153.     if {[lsearch -exact $HTMLmodeVars(browsers) $sig] >= 0} {return}
  154.     lappend HTMLmodeVars(browsers) $sig
  155.     lappend modifiedModeVars {browsers HTMLmodeVars}
  156.     lappend htmlBrowsers [list $sig [set app [file tail $fil]]]
  157. # ◊◊◊◊ Change below for new system §20 ◊◊◊◊ #
  158.     addMenuItem -m Browsers $app
  159. # ◊◊◊◊ end changing for new system §20 ◊◊◊◊ #
  160.     if {$sig == $browserSig} {markMenuItem -m "Browsers" $app on }
  161.     message "$app added to Browsers menu."
  162. }
  163.  
  164. # Remove a browser from Browser menu.
  165. proc htmlRemoveBrowser {} {
  166.     global htmlBrowsers HTMLmodeVars modifiedModeVars browserSig modifiedVars
  167.     foreach b $htmlBrowsers {
  168.         lappend tmp [lindex $b 1]
  169.     }
  170.     if {[catch {listpick -p "Select browser to remove" $tmp} brws] || $brws == ""} {return}
  171.     for {set i 0} {$i < [llength $htmlBrowsers]} {incr i} {
  172.         if {$brws == [lindex [lindex $htmlBrowsers $i] 1]} {
  173.             deleteMenuItem -m Browsers $brws
  174.             if {[lindex $HTMLmodeVars(browsers) $i] == $browserSig} {
  175.                 set j 0
  176.                 if {$i == 0} {incr j}
  177.                 if {$j < [llength $HTMLmodeVars(browsers)]} {set browserSig [lindex $HTMLmodeVars(browsers) $j]}
  178.                 lappend modifiedVars browserSig
  179.             }
  180.             set htmlBrowsers [lreplace $htmlBrowsers $i $i]
  181.             set HTMLmodeVars(browsers) [lreplace $HTMLmodeVars(browsers) $i $i] 
  182.         }
  183.     }
  184.     lappend modifiedModeVars {browsers HTMLmodeVars}
  185.     message "$brws removed from Browsers menu."
  186. }
  187.  
  188. # ◊◊◊◊ Change below for new system §22 ◊◊◊◊ #
  189. # ◊◊◊◊ end changing for new system §22 ◊◊◊◊ #
  190.  
  191.  
  192. proc htmlEnableURLs {onoff} {
  193.     enableMenuItem URLs "Clean Up…" $onoff
  194.     enableMenuItem URLs "Clear" $onoff
  195.     enableMenuItem URLs "Export…" $onoff
  196. }
  197.  
  198. proc htmlEnablewindows {onoff} {
  199.     global htmlUtilsMenu
  200.     enableMenuItem $htmlUtilsMenu Windows $onoff
  201. }
  202.  
  203. proc htmlEnableExtend {a b} {
  204.     enableMenuItem Extend "Change Key Binding…" $a
  205.     enableMenuItem Extend "Change Type and Layout…" $a
  206.     enableMenuItem Extend "Remove Attributes…" $b
  207.     enableMenuItem Extend "Remove Additions…" $b
  208. }
  209.  
  210. proc htmlUseAttrsIsEnabled {} {
  211.     global HTMLmodeVars
  212.     return [expr !$HTMLmodeVars(useBigWindows) || !$HTMLmodeVars(changeInBigWindows) || $HTMLmodeVars(useAttsApplyToDialogs)]
  213. }
  214.  
  215. # This proc is not used any more. It now gives a warning message if the user
  216. # call it to define new elements in HTMLprefs.tcl.
  217. proc htmlNewElemVar {{list ""} {var ""} {val ""}} {
  218.     global htmlShownWarning htmlUtilsMenu
  219.     if {![info exists htmlShownWarning]} {
  220.         beep
  221.         dialog -w 350 -h 290 -t "The way to add custom elements to HTML mode has changed."\
  222.         10 10 340 45 \
  223.         -t "New elements can now be added with the functions found in the submenu\
  224.         Extend in the HTML Utilities menu. However, this submenu is disabled until you remove all\
  225.         your definitions of custom elements from HTMLPrefs.tcl and restart Alpha."\
  226.         10 55 340 150\
  227.         -t "Read more in the section 'Extending HTML mode' in the\
  228.         HTML mode manual about how to avoid this message and how\
  229.         to add new elements to HTML mode." 10 160 340 250\
  230.         -b OK 20 260 85 280
  231.         set htmlShownWarning 1
  232.         enableMenuItem $htmlUtilsMenu Extend off
  233.     }
  234. }
  235.  
  236. proc htmlSetAttrUsed {num elem used} {
  237.     global htmlElemAttrUsed htmlElemAttrUsed3
  238.     if {![info exists htmlElemAttrUsed${num}($elem)]} {set htmlElemAttrUsed${num}($elem) $used}
  239. }
  240.  
  241.  
  242.  
  243. #===============================================================================
  244. # Character entities
  245. #===============================================================================
  246.  
  247. proc htmlNewCharVar {var val} {
  248.     global htmlSpecialCharacter
  249.     global htmlCharacterSpecial
  250.     set htmlSpecialCharacter($var) $val 
  251.     set htmlCharacterSpecial($val) $var
  252. }
  253.  
  254. proc htmlNewCapCharVar {var men val} {
  255.     global htmlSpecialCapCharacter
  256.     global htmlCapCharacterSpecial
  257.     global htmlCapCharSpecMenu
  258.     set htmlSpecialCapCharacter($var) $val 
  259.     set htmlCapCharacterSpecial($val) $var
  260.     set htmlCapCharSpecMenu($men) $val
  261. }
  262.  
  263. htmlNewCharVar "ß" szlig
  264. htmlNewCharVar "à" agrave
  265. htmlNewCharVar "á" aacute
  266. htmlNewCharVar "â" acirc
  267. htmlNewCharVar "ã" atilde
  268. htmlNewCharVar "ä" auml
  269. htmlNewCharVar "å" aring
  270. htmlNewCharVar "æ" aelig
  271. htmlNewCharVar "ç" ccedil
  272. htmlNewCharVar "è" egrave
  273. htmlNewCharVar "é" eacute
  274. htmlNewCharVar "ê" ecirc
  275. htmlNewCharVar "ë" euml
  276. htmlNewCharVar "ì" igrave
  277. htmlNewCharVar "í" iacute
  278. htmlNewCharVar "î" icirc
  279. htmlNewCharVar "ï" iuml
  280. htmlNewCharVar    "eth" eth
  281. htmlNewCharVar "ñ" ntilde
  282. htmlNewCharVar "ò" ograve
  283. htmlNewCharVar "ó" oacute
  284. htmlNewCharVar "ô" ocirc
  285. htmlNewCharVar "õ" otilde
  286. htmlNewCharVar "ö" ouml
  287. htmlNewCharVar "ø" oslash
  288. htmlNewCharVar "ù" ugrave
  289. htmlNewCharVar "ú" uacute
  290. htmlNewCharVar "û" ucirc
  291. htmlNewCharVar "ü"    uuml
  292. htmlNewCharVar "y´" yacute
  293. htmlNewCharVar "thorn" thorn
  294. htmlNewCharVar "ÿ"    yuml
  295.  
  296. htmlNewCapCharVar "À" "À" Agrave
  297. htmlNewCapCharVar "Á" "A´" Aacute
  298. htmlNewCapCharVar "Â" "A^" Acirc
  299. htmlNewCapCharVar "Ã" "Ã" Atilde
  300. htmlNewCapCharVar "Ä" "Ä" Auml
  301. htmlNewCapCharVar "Å" "Å" Aring
  302. htmlNewCapCharVar "Æ" "Æ" Aelig
  303. htmlNewCapCharVar "Ç" "Ç" Ccedil
  304. htmlNewCapCharVar "È" "E`" Egrave
  305. htmlNewCapCharVar "É" "É" Eacute
  306. htmlNewCapCharVar "Ê" "E^" Ecirc
  307. htmlNewCapCharVar "Ë" "E¨" Euml
  308. htmlNewCapCharVar "Ì" "I`" Igrave
  309. htmlNewCapCharVar "Í" "I´" Iacute
  310. htmlNewCapCharVar "Î" "I^" Icirc
  311. htmlNewCapCharVar "Ï" "I¨" Iuml
  312. htmlNewCapCharVar "ETH" "ETH" ETH
  313. htmlNewCapCharVar "Ñ" "Ñ" Ntilde
  314. htmlNewCapCharVar "Ò" "O`" Ograve
  315. htmlNewCapCharVar "Ó" "O´" Oacute
  316. htmlNewCapCharVar "Ô" "O^" Ocirc
  317. htmlNewCapCharVar "Õ" "Õ" Otilde
  318. htmlNewCapCharVar "Ö" "Ö" Ouml
  319. htmlNewCapCharVar "Ø" "Ø" Oslash
  320. htmlNewCapCharVar "Ù" "U`" Ugrave
  321. htmlNewCapCharVar "Ú" "U´" Uacute
  322. htmlNewCapCharVar "Û" "U^" Ucirc
  323. htmlNewCapCharVar "Ü" "Ü"    Uuml
  324. htmlNewCapCharVar "Y´" "Y´" Yacute
  325. htmlNewCapCharVar "THORN" "THORN" THORN
  326.  
  327. set htmlSpecialSymbCharacter(\")    quot
  328. set htmlSpecialSymbCharacter(ampersand) amp
  329. set htmlSpecialSymbCharacter([list less than]) lt
  330. set htmlSpecialSymbCharacter([list greater than]) gt
  331. set htmlSpecialSymbCharacter([list nonbreak space])    nbsp
  332. set htmlSpecialSymbCharacter(¡)    "#161"
  333. set htmlSpecialSymbCharacter(¢) "#162"
  334. set htmlSpecialSymbCharacter(£)    "#163"
  335. set htmlSpecialSymbCharacter(currency)    "#164"
  336. set htmlSpecialSymbCharacter(¥)    "#165"
  337. set htmlSpecialSymbCharacter(§) "#167"
  338. set htmlSpecialSymbCharacter(©)        copy
  339. set htmlSpecialSymbCharacter(ª)    "#170"
  340. set htmlSpecialSymbCharacter(«)    "#171"
  341. set htmlSpecialSymbCharacter(®)        reg
  342. set htmlSpecialSymbCharacter(°)    "#176"
  343. set htmlSpecialSymbCharacter(±) "#177"
  344. set htmlSpecialSymbCharacter(µ)    "#181"
  345. set htmlSpecialSymbCharacter(¶)    "#182"
  346. set htmlSpecialSymbCharacter(middot) "#183"
  347. set htmlSpecialSymbCharacter(º) "#186"
  348. set htmlSpecialSymbCharacter(») "#187"
  349. set htmlSpecialSymbCharacter([list a quarter]) "#188"
  350. set htmlSpecialSymbCharacter([list a half]) "#189"
  351. set htmlSpecialSymbCharacter([list three quarters]) "#190"
  352. set htmlSpecialSymbCharacter(¿)    "#191"
  353. set htmlSpecialSymbCharacter(times)    "#215"
  354. set htmlSpecialSymbCharacter(÷)    "#247"
  355.  
  356.  
  357. rename htmlNewCharVar ""
  358. rename htmlNewCapCharVar ""
  359.  
  360. #===============================================================================
  361. # Menu Processing
  362. #===============================================================================
  363.  
  364. proc htmlMenuItem {menu item} {
  365.     global htmlElemProc htmlDisabledItems1 htmlDisabledItems3 htmlPackageToUse
  366.     global screenWidth defWidth
  367.  
  368.     if {$htmlPackageToUse == 3 && $menu == "Custom"} {beep; return}
  369.     foreach it [set htmlDisabledItems$htmlPackageToUse] {
  370.         if {[lindex [split $it /] 1] == $menu || "${menu}/$item" == $it} {beep; return}
  371.     }
  372.     
  373.     switch -glob $menu {
  374.         "•*" {
  375.             switch $item {
  376.                 "Use Attributes" {
  377.                     if {![htmlUseAttrsIsEnabled]} {beep; return}
  378.                     htmlChooseUseAttr
  379.                 }
  380.                 "Last Modified"     {htmlInsertLastMod}
  381.                 default {eval html[join $item ""]}
  382.             }
  383.         }
  384.         "Browsers" {
  385.             switch $item {
  386.                 "Send File to Browser"    {htmlSendWindow}
  387.                 "Add"    {htmlAddBrowser}
  388.                 "Remove" {htmlRemoveBrowser}
  389.                 default {htmlToggleBrowser $item}
  390.             }
  391.         }
  392.         "Packages"    {eval html[join $item ""]}
  393.         "Preferences" {HTMLmodifyFlags [lindex $item 0]}
  394.         "Palettes" {float -m "$item" -t 50 -l [expr $screenWidth - $defWidth > 110 ? $defWidth : $screenWidth - 110] -z HTML} 
  395.         "Editing" {
  396.             switch $item {
  397.                 "Literal Tab"    {replaceText [getPos] [selEnd] "\t"}
  398.                 default {eval html[join $item ""]}
  399.             }
  400.         }
  401.         "Validate" {eval html[join $item ""]}
  402.         "Character Translation"    {
  403.             switch $item {
  404.                 "åäö -> HTML"        {htmlCharacterstohtml 0}
  405.                 "HTML -> åäö"    {htmltoCharacters 0}
  406.                 "<>& -> HTML"    {htmlCharacterstohtml 1}
  407.                 "HTML -> <>&"    {htmltoCharacters 1}
  408.                 default {eval html[join $item ""]}
  409.             }
  410.         }
  411.         "URLs"    {
  412.             switch $item {
  413.                 "Clean Up"        {htmlCleanUpCache URLs}
  414.                 "Clear"            {htmlClearCache URLs}
  415.                 default {eval html[join $item ""]}
  416.             }
  417.         }
  418.         "Windows"    {
  419.             switch $item {
  420.                 "Clean Up"    {htmlCleanUpCache windows}
  421.                 "Clear"        {htmlClearCache windows}
  422.                 default {eval html[join $item ""]}
  423.             }
  424.         }
  425.         "Check Links" {eval html[join $item ""]}
  426.         "Includes" {eval html[join $item ""]}
  427.         "Home Page Windows" {
  428.             switch $item {
  429.                 "Open" {htmlOpenHPwin}
  430.                 default {eval html[join $item ""]}
  431.             }
  432.         }
  433.         "Extend" {eval html[join $item ""]}
  434.         "Style Sheets" {
  435.             switch $item {
  436.                 Style {htmlTag {htmlBuildCR2Elem STYLE}}
  437.                 Span {htmlTag {htmlBuildElem SPAN}}
  438.                 Import {cssDialog @import}
  439.                 Display {cssDialog Display}
  440.                 default {
  441.                     if {[info commands html[join $item ""]] != ""} {
  442.                         eval html[join $item ""]
  443.                     } else {
  444.                         cssDialog [join [string tolower $item] -]}
  445.                     }
  446.             }
  447.         }
  448.         "Headers" {
  449.             switch $item {
  450.                 "Header1"    {htmlTag {htmlBuildCRElem H1 1}}
  451.                 "H1 no attr" {htmlTag {htmlBuildCRElem H1 1 NOATTR}}
  452.                 "Header2"    {htmlTag {htmlBuildCRElem H2 1}}
  453.                 "H2 no attr" {htmlTag {htmlBuildCRElem H2 1 NOATTR}}
  454.                 "Header3"    {htmlTag {htmlBuildCRElem H3 1}}
  455.                 "H3 no attr" {htmlTag {htmlBuildCRElem H3 1 NOATTR}}
  456.                 "Header4"    {htmlTag {htmlBuildCRElem H4 1}}
  457.                 "H4 no attr" {htmlTag {htmlBuildCRElem H4 1 NOATTR}}
  458.                 "Header5"    {htmlTag {htmlBuildCRElem H5 1}}
  459.                 "H5 no attr" {htmlTag {htmlBuildCRElem H5 1 NOATTR}}
  460.                 "Header6"    {htmlTag {htmlBuildCRElem H6 1}}
  461.                 "H6 no attr" {htmlTag {htmlBuildCRElem H6 1 NOATTR}}
  462.                 default {eval html[join $item ""]}
  463.             }
  464.         }
  465.         "Blocks and Dividers" {
  466.             switch $item {
  467.                 "Paragraph"    {htmlElemParagraph}
  468.                 "P no attr" {htmlElemParagraph NOATTR}
  469.                 "Division"        {htmlTag {htmlBuildCR2Elem DIV}}
  470.                 "Block Quote"    {htmlTag {htmlBuildCR2Elem BLOCKQUOTE}}
  471.                 "Address"        {htmlTag {htmlBuildCRElem ADDRESS}}
  472.                 "Center"        {htmlTag {htmlBuildCR2Elem CENTER}}
  473.                 "Preformatted"    {htmlTag {htmlBuildCR2Elem PRE}}
  474.                 "Multi Column"    {htmlTag {htmlBuildCR2Elem MULTICOL}}
  475.                 "Spacing"        {htmlTag {htmlBuildOpening SPACER}}
  476.                 "Line Break"        {htmlTag {htmlBuildOpening BR 0 1}}
  477.                 "BR no attr"        {htmlTag {htmlBuildOpening BR 0 1 NOATTR}}
  478.                 "Horizontal Rule"    {htmlTag {htmlBuildOpening HR 1 1}}
  479.                 "HR no attr"    {htmlTag {htmlBuildOpening HR 1 1 NOATTR}}
  480.                 "No Line Break"    {htmlTag {htmlBuildElem NOBR}}
  481.                 "Word Break"    {htmlTag {htmlBuildOpening WBR 0 1}}
  482.                 default {eval html[join $item ""]}
  483.             }
  484.         }
  485.         "Styles"    {
  486.             switch $item {
  487.                 "Font"            {htmlTag {htmlBuildElem FONT}}
  488.                 "Basefont"        {htmlTag {htmlBuildOpening BASEFONT 1 1}}
  489.                 "Marquee"        {htmlTag {htmlBuildCRElem MARQUEE}}
  490.                 "Bold"            {htmlTag {htmlBuildElem B}}
  491.                 "Italic"        {htmlTag {htmlBuildElem I}}
  492.                 "Strike out"    {htmlTag {htmlBuildElem STRIKE}}
  493.                 "Underlined"    {htmlTag {htmlBuildElem U}}
  494.                 "Subscript"        {htmlTag {htmlBuildElem SUB}}
  495.                 "Superscript"    {htmlTag {htmlBuildElem SUP}}
  496.                 "Bigger"        {htmlTag {htmlBuildElem BIG}}
  497.                 "Smaller"        {htmlTag {htmlBuildElem SMALL}}
  498.                 "Emphasis"        {htmlTag {htmlBuildElem EM}}
  499.                 "Strong"        {htmlTag {htmlBuildElem STRONG}}
  500.                 "Definition"    {htmlTag {htmlBuildElem DFN}}
  501.                 "Code"            {htmlTag {htmlBuildElem CODE}}
  502.                 "Variable"        {htmlTag {htmlBuildElem VAR}}
  503.                 "Citation"        {htmlTag {htmlBuildElem CITE}}
  504.                 "Keyboard"        {htmlTag {htmlBuildElem KBD}}
  505.                 "Typewriter"    {htmlTag {htmlBuildElem TT}}
  506.                 "Sample"        {htmlTag {htmlBuildElem SAMP}}
  507.                 "Blinking"        {htmlTag {htmlBuildElem BLINK}}
  508.                 default {eval html[join $item ""]}
  509.             }
  510.         }
  511.         "Links"    {
  512.             switch $item {
  513.                 "Link or Anchor" {htmlTag {htmlBuildElem A}}
  514.                 "Image"    {htmlTag {htmlBuildOpening IMG}}
  515.                 Object {htmlTag {htmlBuildCR2Elem OBJECT}}
  516.                 Sound {htmlTag {htmlBuildOpening BGSOUND 1 1}}
  517.                 default {eval html[join $item ""]}
  518.             }
  519.         }
  520.         "Plug-ins" {
  521.             switch $item {
  522.                 "General" {htmlTag {htmlBuildOpening EMBED}}
  523.                 "LiveAudio" {htmlTag {htmlBuildOpening EMBED 0 0 LIVEAUDIO}}
  524.                 "LiveVideo" {htmlTag {htmlBuildOpening EMBED 0 0 LIVEVIDEO}}
  525.                 "QuickTime Movie" {htmlTag {htmlBuildOpening EMBED 0 0 "QUICKTIME MOVIE"}}
  526.                 "QuickTime VR" {htmlTag {htmlBuildOpening EMBED 0 0 "QUICKTIME VR"}}
  527.                 "RealAudio"    {htmlTag {htmlBuildOpening EMBED 0 0 REALAUDIO}}
  528.                 "No Embed" {htmlTag {htmlBuildCR2Elem NOEMBED}}
  529.                 default {eval html[join $item ""]}
  530.             }
  531.         }
  532.         "Lists"    {
  533.             switch $item {
  534.                 "Bulleted"    {htmlTag {htmlBuildList UL "LI IN UL" UL}}
  535.                 "UL no attr"    {htmlTag {htmlBuildList UL NOATTR NOATTR}}
  536.                 "New Bulleted Item" {htmlTag {htmlBuildListEntry "LI IN UL"}}
  537.                 "Numbered"    {htmlTag {htmlBuildList OL "LI IN OL" OL}}
  538.                 "OL no attr"    {htmlTag {htmlBuildList OL NOATTR NOATTR}}
  539.                 "New Numbered Item" {htmlTag {htmlBuildListEntry "LI IN OL"}}
  540.                 "Directory"    {htmlTag {htmlBuildList DIR LI}}
  541.                 "Menu"        {htmlTag {htmlBuildList MENU LI}}
  542.                 "New List Item"    {htmlTag {htmlBuildListEntry LI}}
  543.                 "Discursive"    {htmlTag {htmlBuildList DL}}
  544.                 default {eval html[join $item ""]}
  545.             }
  546.         }
  547.         "Forms" {
  548.             switch $item {
  549.                 "Form"        {htmlTag {htmlBuildCR2Elem FORM}}
  550.                 "Text"        {htmlTag {htmlBuildInputElem TEXT}}
  551.                 "Checkbox"    {htmlTag {htmlBuildInputElem CHECKBOX}}
  552.                 "Button"    {htmlTag {htmlBuildInputElem BUTTON}}
  553.                 "Radio"        {htmlTag {htmlBuildInputElem RADIO}}
  554.                 "Submit"        {htmlTag {htmlBuildInputElem SUBMIT}}
  555.                 "Reset"        {htmlTag {htmlBuildInputElem RESET}}
  556.                 "Password"    {htmlTag {htmlBuildInputElem PASSWORD}}
  557.                 "Hidden"        {htmlTag {htmlBuildInputElem HIDDEN}}
  558.                 "Image"        {htmlTag {htmlBuildInputElem IMAGE}}
  559.                 "File Upload" {htmlTag {htmlBuildInputElem FILE}}
  560.                 "Select"        {htmlTag {htmlBuildCR2Elem SELECT}}
  561.                 "Option"        {htmlTag {htmlBuildOpening OPTION 1 1}}
  562.                 "Textarea"    {htmlTag {htmlBuildCRElem TEXTAREA}}
  563.                 "Key Generator" {htmlTag {htmlBuildOpening KEYGEN 1 1}}
  564.                 default {eval html[join $item ""]}
  565.             }
  566.         }
  567.         "Tables" {
  568.             switch $item {
  569.                 Table    {htmlTag {htmlBuildCR2Elem TABLE}}
  570.                 Row        {htmlTag {htmlBuildCR2Elem TR}}
  571.                 "TR no attr"        {htmlTag {htmlBuildCR2Elem TR NOATTR}}
  572.                 Header        {htmlTag {htmlBuildElem TH}}
  573.                 "TH no attr"        {htmlTag {htmlBuildElem TH NOATTR}}
  574.                 Cell        {htmlTag {htmlBuildElem TD}}
  575.                 "TD no attr"        {htmlTag {htmlBuildElem TD NOATTR}}
  576.                 Caption    {htmlTag {htmlBuildCRElem CAPTION}}
  577.                 Head {htmlTag {htmlBuildOpening THEAD 1 1}}
  578.                 Body {htmlTag {htmlBuildOpening TBODY 1 1}}
  579.                 Foot {htmlTag {htmlBuildOpening TFOOT 1 1}}
  580.                 "Column Group" {htmlTag {htmlBuildOpening COLGROUP 1 1}}
  581.                 Column {htmlTag {htmlBuildOpening COL 1 1}}
  582.                 default {eval html[join $item ""]}
  583.             }
  584.         }
  585.         "Frames" {
  586.             switch $item {
  587.                 Frameset        {htmlTag {htmlBuildCR2Elem FRAMESET}}
  588.                 Frame        {htmlTag {htmlBuildOpening FRAME 1 1}}
  589.                 "Inline Frame" {htmlTag {htmlBuildElem IFRAME}}
  590.                 "No Frames"    {htmlTag {htmlBuildCR2Elem NOFRAMES}}
  591.                 default {eval html[join $item ""]}
  592.             }
  593.         }
  594.         "Image Maps" {
  595.             switch $item {
  596.                 Map        {htmlTag {htmlBuildCR2Elem MAP}}
  597.                 Area    {htmlTag {htmlBuildOpening AREA 1 1}}
  598.                 default {eval html[join $item ""]}
  599.             }
  600.         }
  601.         "Java and JavaScript"    {
  602.             switch $item {
  603.                 Applet    {htmlTag {htmlBuildCR2Elem APPLET}}
  604.                 Parameter {htmlTag {htmlBuildOpening PARAM 1 1}}
  605.                 Script    {htmlTag {htmlBuildCR2Elem SCRIPT}}
  606.                 "No Script" {htmlTag {htmlBuildCR2Elem NOSCRIPT}}
  607.                 default {eval html[join $item ""]}
  608.             }
  609.         }
  610.         "Layers" {
  611.             switch $item {
  612.                 Layer {htmlTag {htmlBuildCR2Elem LAYER}}
  613.                 "Inline Layer" {htmlTag {htmlBuildCRElem ILAYER}}
  614.                 "No Layer" {htmlTag {htmlBuildCR2Elem NOLAYER}}
  615.                 default {eval html[join $item ""]}
  616.             }
  617.         }
  618.         "Other"    {
  619.             switch $item {
  620.                 "Base"    {htmlTag {htmlBuildOpening BASE 1 1}}
  621.                 "Isindex" {htmlTag {htmlBuildOpening ISINDEX 1 1}}
  622.                 "Link"    {htmlTag {htmlBuildOpening LINK 1 1}}
  623.                 "Meta"    {htmlTag {htmlBuildOpening META 1 1}}
  624.                 default {eval html[join $item ""]}
  625.             }
  626.         }
  627.         "Character Entities"    {
  628.             switch $item {
  629.                 "Add"    {htmlAddCommonChars}
  630.                 "Default" {htmlDefaultCommonChars}
  631.                 "Clear"    {htmlClearCommonChars}
  632.                 default        {htmlInsertCharacter $item}
  633.             }
  634.         }
  635.         "*Chars" {
  636.             htmlInsertCharacter $item
  637.         }
  638.         "Custom"    {
  639.             htmlTag $htmlElemProc([string toupper $item])
  640.         }
  641.     }
  642. }
  643.  
  644.  
  645. # Variables defining the sub menus. More variables in hctsmslMenu.tcl
  646.  
  647. set htmlHTMLSub {{"<I/t" "Help"} {"<B/m" "Use Attributes…"} {"<B<U<I/D" "New Document…"}}
  648.  
  649. set htmlBrowsersSub {{"<U<O/S" "Send File to Browser"} "(-" {"" "Add…"} {"" "Remove…"} "(-"}
  650.  
  651. set htmlPackagesSub {{"" "HTML 3.2 and CSS"} {"" Extensions} "(-" {"" "Hide CSS Attributes"} 
  652.     {"" "Hide Netscape Only"} {"" "Hide IE Only"}}
  653.  
  654. set htmlPreferencesSub {{"" "General…"} {"" "Indentation…"} {"" "JavaScript and CSS…"}
  655.     {"" "Checking Links…"} {"" "Word Wrapping…"}}
  656.     
  657. set htmlUtilitiesSub {{"" "Colors…"} {"" "Home Pages…"} {"" "Footers…"} {"" "Key Bindings…"}
  658.     {"<O/I" "Reformat Paragraph/Reformat Document"} {"" "Save to FTP Server/Forget Passwords"} {"" "Move Files…"} {"" "Last Modified…"} {"" "Document Size"} {"" "Document Index…"}}
  659.  
  660. set htmlEditingSub {{"<O/B" "Select Container/Select Opening"}
  661.     {"<U<O/B" "Select in Container"}
  662.     {"<B/e" "Untag/Untag and Select"} {"<B/f" "Remove Opening"}
  663.     {"<B/g" "Change Container…/Change Opening…"} {"<B/h" "Change Choice"}
  664.     {"<B/i" "Reveal Color"} {"<B/j" "Insert Attributes"} {"" "Quote All Attributes"} "(-" {"<O/c" "Word Complete"} {"/c" "Next Tab Mark"}
  665.     {"<U/c" "Previous Tab Mark"} {"<I/c" "Literal Tab"} {"<B/c" "Remove Marks"} {"" "Remove Tags"}}
  666.  
  667. set htmlValidateSub {{"" "Find Unbalanced Tags"} {"" "Check Tags"}}
  668.  
  669. set htmlCharacterSub {{"" "åäö -> HTML"} {"" "HTML -> åäö"}}
  670.  
  671. set htmlURLsSub {{"" "Clean Up…"} {"" "Clear"} {"" "Import…"} {"" "Export…"} {"" "Add Folder…"}
  672.     {"" "Add Selection"} {"" "Add Clipboard"}}
  673.  
  674. set htmlWindowsSub {{"" "Clean Up…"} {"" "Clear"}}
  675.  
  676. set htmlCheckSub {{"" "Check Window"} {"" "Check Home Page…"} {"" "Check Folder…"} {"" "Check File…"}
  677.     {"" "Check Remote Links"} "(-" {"" "Use Big Brother"}}
  678.  
  679. set htmlIncludesSub {{"" "Insert Include Tags…"} "(-" {"" "Update Window"} {"" "Update Home Page…"}
  680.     {"" "Update Folder…"} {"" "Update File…"}}
  681.  
  682. set htmlHomeSub {{"" Open…} {"<U<O/V" "Paste URL"} {"" "Refresh Windows"}}
  683.  
  684. set htmlExtendSub {{"" "New Element…"} {"" "New Attributes…"} {"" "New Choices…"} {"" "Change Key Binding…"}
  685.     {"" "Change Type and Layout…"} {"" "Remove Attributes…"} {"" "Remove Additions…"}}
  686.  
  687. set htmlUtilSubMenus {Utilities Editing Validate {Character Translation} URLs Windows
  688. {Check Links} Includes {Home Page Windows} Extend}
  689.  
  690. #
  691. # The menu.
  692. #
  693. # <B = control <I = option <U = shift <O = command <S = dynamic
  694.  
  695. proc htmlBuildMenu {{msg "Building HTML menu…"}} {
  696.     global htmlPackageToUse HTMLmodeVars htmlMenu
  697. # htmlPackageToUse must be set here. It's used globally in many places.
  698.     set htmlPackageToUse $HTMLmodeVars(htmlPackageToUse)
  699.     # Check if user used HTML 2.0!
  700.     if {[lsearch -exact {1 3} $htmlPackageToUse] < 0} {
  701.         set htmlPackageToUse 3
  702.         set HTMLmodeVars(htmlPackageToUse) 3
  703.         lappend modifiedModeVars {htmlPackageToUse HTMLmodeVars}
  704.     }
  705.     
  706.     if {$htmlPackageToUse == 1} {
  707.         htmlExtensions.tcl
  708.     } else {
  709.         html32.tcl
  710.     }
  711.     
  712.     if {[catch {htmlReadCache "HTML menu cache"}]} {
  713.         message $msg
  714.         htmlBuildMenu0
  715.     } else {
  716.         message "Reading HTML menu definition…"
  717.     }
  718.     insertMenu $htmlMenu
  719.  
  720.     htmlPackagesMenuExtra
  721.     htmlDisMark
  722.     # Disable Use Attrs menu if status bar isn't used.
  723.     if {![htmlUseAttrsIsEnabled]} {
  724.         enableMenuItem $htmlMenu "Use Attributes…" off
  725.     }
  726.     htmlBrowsersMenuExtra
  727. }
  728.  
  729. proc htmlBuildMenu0 {} {
  730.     global htmlCustomMenuList htmlPackageToUse modifiedModeVars htmlStartElements
  731.     global htmlMenu HTMLmodeVars htmlSpecialCharacter
  732.     global htmlCapCharSpecMenu htmlSpecialSymbCharacter
  733.     global htmlElemKeyBinding htmlMenuKey
  734.     global htmlSubMenus customHTMLpalettes
  735.     
  736.     set commonChars $HTMLmodeVars(commonChars)
  737.     # Build submenus
  738.     htmlReadMenuKeys
  739.     foreach me $htmlSubMenus {
  740.         set [lindex $me 0]Menu [htmlBuildOneMenu $me]
  741.     }
  742.     
  743.     
  744.     lappend htmlMenuList [list menu -M HTML -p htmlMenuItem -m -n Browsers $BrowsersMenu]
  745.     append htmlMenuList " " [lindex $HTMLMenu 0]
  746.     lappend htmlMenuList [list menu -M HTML -p htmlMenuItem -m -n Packages $PackagesMenu]
  747.     lappend htmlMenuList [list menu -M HTML -p htmlMenuItem -m -n Preferences $PreferencesMenu]
  748.     # add custom pallettes if any
  749.     if {[info exists customHTMLpalettes]} {
  750.         lappend htmlMenuList [list menu -M HTML -p htmlMenuItem -m -n Palettes $customHTMLpalettes]
  751.     }
  752.     lappend htmlMenuList [lindex $HTMLMenu 1] "(-" [lindex $HTMLMenu 2]
  753.     for {set i $htmlStartElements} {$i < [llength $htmlSubMenus]} {incr i} {
  754.         lappend htmlMenuList [list menu -M HTML -p htmlMenuItem -m -n [lindex $htmlSubMenus $i] [set [lindex [lindex $htmlSubMenus $i] 0]Menu]]
  755.     }
  756.     
  757.     # Allow user to insert custom menu items    
  758.     if {[info exists htmlElemKeyBinding]} {
  759.         foreach elem [lsort [array names htmlElemKeyBinding]] {
  760.             lappend customMenuList "$htmlElemKeyBinding($elem)[string range $elem 0 0][string tolower [string range $elem 1 end]]"
  761.         }
  762.         set htmlCustomMenu [list menu -M HTML -p htmlMenuItem -m -n "Custom" $customMenuList]
  763.         lappend htmlMenuList $htmlCustomMenu
  764.     }
  765.     
  766.     # Show alert if user uses old way of defining custom elements.
  767.     if {[info exists htmlCustomMenuList]} {htmlNewElemVar}    
  768.     
  769.     # Character entities
  770.     set htmlSmallCharsMenu [list menu -M HTML -p htmlMenuItem -m -n "Small Chars" \
  771.     [lsort  [array names htmlSpecialCharacter]]]
  772.     set htmlCapCharsMenu [list menu -M HTML -p htmlMenuItem -m -c -n "Capital Chars" \
  773.     [lsort [array names htmlCapCharSpecMenu]]]
  774.     set htmlSymbCharsMenu [list menu -M HTML -p htmlMenuItem -m -n "Other Chars" \
  775.     [lsort [array names htmlSpecialSymbCharacter]]]    
  776.     set tmp $commonChars
  777.     if {[llength $commonChars]} {lappend tmp "(-"}
  778.     lappend tmp Add… Default Clear $htmlSmallCharsMenu $htmlCapCharsMenu $htmlSymbCharsMenu  
  779.     set htmlCharsMenu [list menu -M HTML -p htmlMenuItem -m -n "Character Entities" $tmp]
  780.     lappend htmlMenuList $htmlCharsMenu
  781.     
  782.     # Define menu
  783.     menu -M HTML -m  -p htmlMenuItem -n $htmlMenu $htmlMenuList
  784.     
  785.     set h {menu -M HTML -m  -p htmlMenuItem -n $htmlMenu}
  786.     lappend h $htmlMenuList
  787.     htmlSaveCache "HTML menu cache" $h
  788.     catch {unset htmlMenuKey}
  789. }
  790.  
  791.  
  792. proc htmlRebuildMenu {msg} {
  793.     htmlDeleteCache "HTML menu cache"
  794.     htmlBuildMenu $msg
  795. }
  796.  
  797. # Mark subpackages
  798. proc htmlPackagesMenuExtra {} {
  799.     global HTMLmodeVars
  800.     if {$HTMLmodeVars(hideNetscape)} {markMenuItem -m Packages "Hide Netscape Only" 1 }
  801.     if {$HTMLmodeVars(hideIE)} {markMenuItem -m Packages "Hide IE Only" 1 }
  802.     if {$HTMLmodeVars(hideStyleAttrs)} {markMenuItem -m Packages "Hide CSS Attributes" 1 }
  803. }
  804.  
  805. # Add browsers to Browser menu
  806. proc htmlBrowsersMenuExtra {} {
  807.     global HTMLmodeVars browserSig modifiedModeVars htmlBrowsers
  808.     if {[lsearch -exact $HTMLmodeVars(browsers) $browserSig] < 0} {
  809.         lappend HTMLmodeVars(browsers) $browserSig
  810.         lappend modifiedModeVars {browsers HTMLmodeVars}
  811.     }
  812.     set htmlBrowsers {}
  813.     set tmpbrws {}
  814.     foreach brws $HTMLmodeVars(browsers) {
  815.         if {![catch {nameFromAppl $brws} name]} {
  816.             set name [file tail $name]
  817.             lappend htmlBrowsers [list $brws $name]
  818.             lappend tmpbrws $brws
  819. # ◊◊◊◊ Change below for new system §21 ◊◊◊◊ #
  820.             addMenuItem -m "Browsers" $name
  821. # ◊◊◊◊ end changing for new system §21 ◊◊◊◊ #
  822.             if {$brws == $browserSig} {markMenuItem -m "Browsers" $name on }
  823.         } else {
  824.             lappend modifiedModeVars {browsers HTMLmodeVars}
  825.         }
  826.     }
  827.     set HTMLmodeVars(browsers) $tmpbrws
  828. }
  829.  
  830. # Mark and disable some stuff
  831. proc htmlDisMark {} {
  832.     global htmlPackageToUse
  833.     htmlDisableSome $htmlPackageToUse off
  834.     if {$htmlPackageToUse == 1} {
  835.         htmlMarkExt
  836.     } else {
  837.         htmlMark32
  838.     }
  839. }
  840.  
  841. proc htmlBuildUtilsMenu {{msg "Building HTML Utilities menu…"}} {
  842.     global htmlUtilsMenu
  843.  
  844.     if {[catch {htmlReadCache "HTML Utilities menu cache"}]} {
  845.         message $msg
  846.         htmlBuildUtilsMenu0
  847.     } else {
  848.         message "Reading HTML Utilities menu definition…"
  849.     }
  850.     insertMenu $htmlUtilsMenu
  851.     
  852.     htmlCharacterMenuExtra
  853.     htmlCheckMenuExtra
  854.     htmlURLsMenuExtra
  855.     htmlWindowsMenuExtra
  856.     htmlUtilDisMark
  857.  
  858. }
  859.  
  860. proc htmlRebuildUtilsMenu {msg} {
  861.     htmlDeleteCache "HTML Utilities menu cache"
  862.     htmlBuildUtilsMenu $msg
  863. }
  864.  
  865. proc htmlBuildUtilsMenu0 {} {
  866.     global htmlUtilSubMenus HTMLmodeVars htmlPackageToUse htmlUtilsMenu htmlMenuKey
  867.     # Build submenus
  868.     htmlReadMenuKeys
  869.     foreach me $htmlUtilSubMenus {
  870.         set [lindex $me 0]Menu [htmlBuildOneMenu $me]
  871.     }
  872.  
  873.     foreach me [lrange $htmlUtilSubMenus 1 end] {
  874.         lappend utilSubs [list menu -M HTML -p htmlMenuItem -m -n $me [set [lindex $me 0]Menu]]
  875.     }
  876.     
  877.     menu -M HTML -p htmlMenuItem -m \
  878.     -n $htmlUtilsMenu [concat [lrange  $UtilitiesMenu 0 3] "(-" \
  879.     $utilSubs "(-" [lrange $UtilitiesMenu 4 end]]
  880.     
  881.     set h {menu -M HTML -p htmlMenuItem -m -n $htmlUtilsMenu}
  882.     lappend h [concat [lrange  $UtilitiesMenu 0 3] "(-" \
  883.     $utilSubs "(-" [lrange $UtilitiesMenu 4 end]]
  884.     htmlSaveCache "HTML Utilities menu cache" $h
  885.     catch {unset htmlMenuKey}
  886. }
  887.  
  888. # Add some things to translation menu.
  889. proc htmlCharacterMenuExtra {} {
  890.     addMenuItem -m -l "" "Character Translation" "<>& -> HTML"
  891.     addMenuItem -m -l "" "Character Translation" "HTML -> <>&"
  892. }
  893.  
  894. # Check if Big Brother exists and if it should be used.
  895. proc htmlCheckMenuExtra {} {
  896.     global HTMLmodeVars modifiedModeVars
  897.     if {[catch {nameFromAppl Bbth}]} {
  898.         enableMenuItem "Check Links" "Use Big Brother" off
  899.         enableMenuItem "Check Links" "Check Remote Links" off
  900.         if {$HTMLmodeVars(useBigBrother)} {
  901.             set HTMLmodeVars(useBigBrother) 0
  902.             lappend modifiedModeVars {useBigBrother HTMLmodeVars}
  903.         }
  904.     } elseif {$HTMLmodeVars(useBigBrother)} {
  905.         markMenuItem -m {Check Links} {Use Big Brother} 1 
  906.     }
  907. }
  908.  
  909. # Disable URLs menu if cache is empty.
  910. proc htmlURLsMenuExtra {} {
  911.     global HTMLmodeVars
  912.     if {![llength $HTMLmodeVars(URLs)]} {htmlEnableURLs off}
  913. }
  914.  
  915. # Disable Windows menu if cache is empty.
  916. proc htmlWindowsMenuExtra {} {
  917.     global HTMLmodeVars
  918.     if {![llength $HTMLmodeVars(windows)]} {htmlEnablewindows off}
  919. }
  920.  
  921. # Mark and disable some stuff
  922. proc htmlUtilDisMark {} {
  923.     global htmlPackageToUse
  924.     htmlDisableSome $htmlPackageToUse off
  925.     if {$htmlPackageToUse == 1} {
  926.         htmlMarkExtUtil
  927.     } else {
  928.         htmlMark32Util
  929.     }
  930. }
  931.  
  932. proc htmlSetDis1 {} {
  933.     global HTMLmodeVars htmlDisabledItems1 htmlDisabledNetscape htmlDisabledIE
  934.     set htmlDisabledItems1 ""
  935.     if {$HTMLmodeVars(hideNetscape)} {append htmlDisabledItems1 " " $htmlDisabledNetscape}
  936.     if {$HTMLmodeVars(hideIE)} {append htmlDisabledItems1 " " $htmlDisabledIE}
  937. }
  938.  
  939. # Disabled menu items
  940. set htmlDisabledNetscape [list "Blocks and Dividers/Multi Column" \
  941. "Blocks and Dividers/Spacing" "Styles/Blinking" "Forms/Key Generator" "${htmlMenu}/Layers"]
  942. set htmlDisabledIE [list "Styles/Marquee" "Links/Sound"]
  943.  
  944. htmlSetDis1
  945.  
  946. set htmlDisabledItems3 [list "Packages/Hide Netscape Only" "Packages/Hide IE Only" \
  947. "Blocks and Dividers/Multi Column" \
  948. "Blocks and Dividers/Spacing" "Blocks and Dividers/No Line Break" \
  949. "Blocks and Dividers/Word Break" "Styles/Marquee" "Styles/Blinking" "Links/Object" \
  950. "Links/Sound" "${htmlMenu}/Plug-ins" "Tables/Head" "Tables/Body" \
  951. "Tables/Foot" "Tables/Column Group" "Tables/Column" "Forms/Button" "Forms/Key Generator" \
  952. "${htmlMenu}/Frames" "Java and JavaScript/Script" "Java and JavaScript/No Script" "${htmlMenu}/Layers"]
  953.